// 从零开始
// console.log('权限文件开始执行了')
// 菜单权限+页面跳转（引入mian.js）

import router from '@/router'
import store from '@/store'
// import { asyncRoutes } from '@/router'
import NProgress from 'nprogress'// 进度条
import 'nprogress/nprogress.css'
// 导入动态路由表(包含所有可选的未经过滤的路由表)
import { asyncRoutes } from '@/router'
console.log('asyncRoutes', asyncRoutes)
const whiteList = ['/login', '/404']
// 路由跳转前开启
NProgress.start()
// 路由全局前置导航守卫
router.beforeEach(function(to, from, next) {
  // next:放行方法
  const token = store.getters.token
  if (token) {
  // 有token
    if (to.path === '/login') {
      // 如果有token且去登陆，则跳转调转到首页
      next('/')
    } else {
      // 如果有token但不是去登录，直接放行
      // 保证有token，去调用actions获取个人信息
      // 只有没有存入用户数据的时候才触发action调用接口
      if (!store.state.user.userInfo.userId) {
        store.dispatch('user/asyncGetUserInfo').then(res => {
          // console.log('获取信息接口，再跳转')
          // 菜单权限路由
          const menus = res.roles.menus
          // 过滤出来的权限
          const fileRoutes = asyncRoutes.filter(item =>
            menus.includes(item.children[0].name)
          )
          console.log('menus', menus)
          console.log('fileRoutes', fileRoutes)
          // router.addRoutes(fileRoutes)// 添加到路由系统
          store.commit('menus/setMenuList', fileRoutes)// vuex里
          router.addRoutes([...fileRoutes, { path: '*', redirect: '/404', hidden: true }])// 添加到路由系统
          next(
            {
              ...to, // next({ ...to })的目的,是保证路由添加完了再进入页面 (可以理解为重进一次)
              replace: true // 覆盖上一次的记录
            }
          )
        })
        return
      }
      next()
    }
  } else {
    // 无token
    if (whiteList.includes(to.path)) {
      // 在白名单内，直接放行
      next()
    } else {
      // 不在白名单内强制跳转到登录
      next('/login')
    }
  }
  // 路由跳转后关闭
  NProgress.done()
})

